import { request } from '@/utils/request'
import type { SysUser } from '@/types/user'
import type { PageQuery } from '@/types/api'

// 获取用户列表
export function getUserList(params?: Record<string, any>) {
  return request<SysUser[]>({
    url: '/user/list',
    method: 'get',
    params
  })
}

// 分页获取用户列表
export function getUserPage(params: PageQuery & Record<string, any>) {
  return request<{
    rows: SysUser[]
    total: number
    pages?: number
    current?: number
    size?: number
  }>({
    url: '/user/page',
    method: 'get',
    params
  })
}

// 获取用户详情
export function getUserDetail(userId: number) {
  return request<SysUser>({
    url: `/user/${userId}`,
    method: 'get'
  })
}

// 新增用户
export function addUser(data: Partial<SysUser>) {
  return request({
    url: '/user',
    method: 'post',
    data
  })
}

// 修改用户
export function updateUser(data: Partial<SysUser>) {
  return request({
    url: '/user',
    method: 'put',
    data
  })
}

// 删除用户
export function deleteUser(userId: number) {
  return request({
    url: `/user/${userId}`,
    method: 'delete'
  })
}

// 获取个人信息（当前登录用户）
export function getProfile() {
  return request<SysUser>({
    url: '/profile',
    method: 'get'
  })
}

// 更新个人信息（当前登录用户）
export function updateProfile(data: Partial<SysUser>) {
  return request({
    url: '/profile',
    method: 'put',
    data
  })
}

// 修改密码（当前登录用户）
export function updatePassword(oldPassword: string, newPassword: string) {
  return request({
    url: '/profile/updatePassword',
    method: 'put',
    params: {
      oldPassword,
      newPassword
    }
  })
}

// 上传头像（当前登录用户）
export function uploadAvatar(file: File) {
  const formData = new FormData()
  formData.append('file', file)
  return request<string>({
    url: '/profile/uploadAvatar',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

// 更新头像（当前登录用户）
export function updateAvatar(avatarUrl: string) {
  return request<string>({
    url: '/profile/avatar',
    method: 'put',
    params: {
      avatarUrl
    }
  })
}
